home *** CD-ROM | disk | FTP | other *** search
- Uses Dos;
- var
- ExitSave,
- BKDISave,
- BKDIHandler : Pointer;
- Regs : Registers;
- Abort : Boolean;
-
- {$F+}
- procedure NewCntlBreakHandler(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:Word);
- interrupt;
- begin
- inline($FA); { disable interrupts }
- { do nada widda data } { OR DO ANYTHING YOU WANT }
- inline($FB); { enable interrupts }
- Abort := True; { Use this for (while NOT abort do..) }
- end;
-
- procedure NewBKDIHandler(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:Word);
- interrupt;
- begin
- inline($FA); { disable interrupts }
- { do nada widda data } { OR DO ANYTHING YOU WANT }
- inline($FB); { enable interrupts }
- AX := 0; {This must remain. An oversight in Turbo Pascal.}
- end;
-
- procedure MyExit;
- begin
- ExitProc := ExitSave;
- SetIntVec($1B, BKDISave);
- SetIntVec($24, BKDIHandler);
- end;
- {$F-}
-
-
- begin
- ExitSave := ExitProc;
- ExitProc := @MyExit;
- Regs.AH := $35; { Get Cntl-Break Interrupt Vector }
- Regs.AL := $1B;
- Intr($21,Regs);
- BKDISave := Ptr(Regs.ES, Regs.BX);
- SetIntVec($1B, @NewBKDIHandler);
- Regs.AH := $35; { Get Cntl-Break Handler Interrupt Vector }
- Regs.AL := $23;
- Intr($21,Regs);
- BKDIHandler := Ptr(Regs.ES, Regs.BX);
- SetIntVec($23, @NewCntlBreakHandler);
-
- { Do whatever here. When finished, the old interrupt vectors are
- restored in the MyExit procedure }
- end.
-